﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sped.Sped
{
    public static class ValidaDoc
    {
        public static bool ValidaCPF(this string Value)
        {
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string tempCpf;
            string digito;

            int soma;
            int resto;

            Value = Value.Trim();
            Value = Value.Replace(".", "").Replace("-", "");

            if (Value.Length != 11)
            {
                return false;
            }
            tempCpf = Value.Substring(0, 9);

            soma = 0;

            for (int i = 0; i < 9; i++)
            {
                soma += int.Parse(tempCpf[i].ToString()) * (multiplicador1[i]);
            }
            resto = soma % 11;

            if (resto < 2)
            {
                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }

            digito = resto.ToString();
            tempCpf = tempCpf + digito;
            int soma2 = 0;

            for (int i = 0; i < 10; i++)
            {
                soma2 += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
            }

            resto = soma2 % 11;

            if (resto < 2)
            {
                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }

            digito = digito + resto.ToString();
            return Value.EndsWith(digito);
        }


        public static bool ValidaCNPJ(this string Value)
        {
            string Cnpj_1 = Value.Substring(0, 12);
            string Cnpj_2 = Value.Substring(Value.Length - 2);
            string Mult = "543298765432";

            string Controle = String.Empty;
            int Digito = 0;
            for (int j = 1; j < 3; j++)
            {
                int Soma = 0;
                for (int i = 0; i < 12; i++)
                {
                    Soma += Convert.ToInt32(Cnpj_1.Substring(i, 1)) * Convert.ToInt32(Mult.Substring(i, 1));
                }

                if (j == 2)
                {
                    Soma += (2 * Digito);
                }

                Digito = ((Soma * 10) % 11);

                if (Digito == 10)
                {
                    Digito = 0;
                }

                Controle = Controle + Digito.ToString();
                Mult = "654329876543";
            }

            return (Controle != Cnpj_2);
        }
    }
}
